/**
 * ESM加载器 - 帮助解决ES模块在打包环境中的加载问题
 * 此文件必须使用 .mjs 扩展名或在父目录有package.json设置 "type": "module"
 */

// 显示脚本启动信息
console.log('[ESM加载器] 启动中...');

// 输出Node.js版本和启动模式信息
console.log(`[ESM加载器] Node.js版本: ${process.version}`);
console.log(`[ESM加载器] 进程参数: ${process.argv.join(' ')}`);
console.log(`[ESM加载器] NODE_OPTIONS: ${process.env.NODE_OPTIONS || '(未设置)'}`);

// 检查重要的环境变量
console.log('[ESM加载器] 关键环境变量:');
['IS_PACKAGED', 'APP_RESOURCE_PATH'].forEach(key => {
  console.log(`  ${key}: ${process.env[key] || '(未设置)'}`);
});

// 处理环境变量中的命令行参数
const args = process.argv.slice(2);
console.log(`[ESM加载器] 参数列表:`, args);

// 尝试解析传入的路径参数
let targetScriptPath = null;
for (const arg of args) {
  if (arg.endsWith('.js') || arg.endsWith('.mjs')) {
    targetScriptPath = arg;
    break;
  }
}

if (!targetScriptPath) {
  console.error('[ESM加载器] 错误: 未找到目标脚本路径');
  process.exit(1);
}

console.log(`[ESM加载器] 目标脚本: ${targetScriptPath}`);

// 尝试使用动态导入加载目标脚本
(async () => {
  try {
    console.log(`[ESM加载器] 正在以ES模块方式导入: ${targetScriptPath}`);

    // 使用动态导入加载目标模块
    const targetModule = await import(targetScriptPath);
    console.log('[ESM加载器] 模块导入成功');

    // 如果模块导出了main函数，则调用它
    if (typeof targetModule.main === 'function') {
      console.log('[ESM加载器] 执行模块的main函数');
      await targetModule.main();
    } else {
      console.log('[ESM加载器] 模块没有导出main函数，将由模块自行处理执行流程');
    }
  } catch (error) {
    console.error('[ESM加载器] 导入模块时出错:', error);
    process.exit(1);
  }
})();